/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 dialogs_provider.hh                                       VLC Gtkmmm gui module
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Copyright © 2006-2008 the VideoLAN team

 Authors: David GUGLIELMI <raxxx.fr@gmail.com>
          David LARROQUE <david.larroque@gmail.com>

 This program is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free Software
 Foundation; either version 2 of the License, or (at your option) any later
 version.

 This program is distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 PARTICULAR PURPOSE. See the GNU General Public License for more details.

 You should have received a copy of the GNU General Public License along with
 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
 Street, Fifth Floor, Boston MA 02110-1301, USA.
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/

#ifndef __DIALOGS_PROVIDER_H_
#define __DIALOGS_PROVIDER_H_

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <assert.h>
#include <vlc_common.h>
#include <vlc_interface.h>

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
enum {
  EXT_FILTER_MEDIA     =  0x01,
  EXT_FILTER_VIDEO     =  0x02,
  EXT_FILTER_AUDIO     =  0x04,
  EXT_FILTER_PLAYLIST  =  0x08,
  EXT_FILTER_SUBTITLE  =  0x10,
};

enum {
  OPEN_FILE_TAB,
  OPEN_DISC_TAB,
  OPEN_NETWORK_TAB,
  OPEN_CAPTURE_TAB,
  OPEN_TAB_MAX
};

enum {
  OPEN_AND_PLAY,
  OPEN_AND_STREAM,
  OPEN_AND_SAVE,
  OPEN_AND_ENQUEUE,
  SELECT
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
class DialogsProvider
{

public:

  static DialogsProvider *getInstance ()
   {
    assert (instance);
    return instance;
   }
   
  static DialogsProvider *getInstance (intf_thread_t *p_intf)
   {
    if (!instance)
      instance = new DialogsProvider (p_intf);
    return instance;
   }

  static void killInstance ()
   {
    if (instance) delete instance;
    instance = NULL;
   }

  virtual ~DialogsProvider ();

  // Media menu
  static void open_file ();
  static void open_dir ();
  static void open_disc ();
  static void open_network ();
  static void open_capture ();
  static void open_streaming ();
  static void open_convert ();
  static void quit ();

  // Playlist menu
  static void toggle_playlist ();
  static void open_playlist ();
  static void save_playlist ();
  static void unlock_playlist ();

  // Tools menu
  static void extented_dialog ();
  static void toggle_minimal_view ();
  static void toggle_fullscreen ();
  static void toggle_advanced ();
  static void message_dialog ();
  static void media_info_dialog ();
  static void media_codec_dialog ();
  static void bookmarks_dialog ();
#ifdef ENABLE_VLM
  static void vlm_dialog ();
#endif
  static void prefs_dialog ();

  // Audio menu


  // Video menu


  // Playback menu
  static void gototime ();

  // Help menu
  static void help ();
#ifdef UPDATE_CHECK
  static void update_dialog ();
#endif
  static void about ();

  // Submenus
  static void podcast_dialog ();

private:

  DialogsProvider (intf_thread_t *);
  intf_thread_t *p_intf;
  static DialogsProvider *instance;

};

#endif /* __DIALOGS_PROVIDER_H_ */
